﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ComesEnCasa.Entidades;
using System.Data.Entity;

namespace ComesEnCasa.Datos.Repositorio
{
    public class EntidadRepository : RepositoryBase
    {
        public List<Entidad> Listado()
        {
            return Contexto.Entidades.ToList();
        } 

        public bool Guardar(Entidad entidad)
        {
            if (entidad.EntidadId == 0)
            {
                entidad.ImagenEntidad = new ImagenEntidad();
                Contexto.Entidades.Add(entidad);
            }
            else
            {
                var original = Contexto.Entidades.FirstOrDefault(e => e.EntidadId == entidad.EntidadId);
                Contexto.Entry(original).CurrentValues.SetValues(entidad);
            }
            try
            {
                Contexto.SaveChanges();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public bool Eliminar(int entidadId)
        {
            var entidad = Contexto.Entidades.FirstOrDefault(e => e.EntidadId == entidadId);

           
            Contexto.Entidades.Remove(entidad);
            try
            {
                Contexto.SaveChanges();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public bool BajaLogica(int entidadId)
        {
            var entidad = Contexto.Entidades.FirstOrDefault(e => e.EntidadId == entidadId);
            try
            {
                entidad.Baja = true;
                Contexto.SaveChanges();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        
        public Entidad Obtener(int entidadId)
        {
            return Contexto.Entidades.FirstOrDefault(e => e.EntidadId == entidadId);
        }

        public ImagenEntidad ObtenerImagen(int entidadId)
        {
            return Contexto.ImagenesEntidades.FirstOrDefault(e => e.entidadId == entidadId);
        }

        public EntidadCompleta ObtenerCompleta(int entidadId)
        {
            return Contexto.ObtenerEntidadCompleta(entidadId).FirstOrDefault();
        }

        public bool GuardarImagen(ImagenEntidad imagen)
        {
            var original = Contexto.ImagenesEntidades.FirstOrDefault(i => i.entidadId == imagen.entidadId);
            Contexto.Entry(original).CurrentValues.SetValues(imagen);

            try
            {
                Contexto.SaveChanges();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public Entidad ObtenerConImagen(int entidadId)
        {
            return Contexto.Entidades.Include(e => e.ImagenEntidad).FirstOrDefault(e => e.EntidadId == entidadId);
        }
    }
}
